﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Transactions; // Transactions!
using DataAccessLayer;


namespace DALConsoleTest
{
    class Program
    {
        static void Main(string[] args)
        {
            DAL dal = new DAL();
            foreach(DataAccessLayer.Class c in dal.Classes)
            {
                Console.WriteLine("Classnumber: {0}, Classname: {1}", c.ClassNumber, c.ClassName);
                foreach (var s in c.Students)
                {
                    Console.WriteLine("\tStudent name: {0}", s.Name);
                }
            }
            char key = (char)Console.Read();

            // Dæmi um innsetningu námskeiðs
            if (key == 'i')
            {
                Class newclass = new Class("Fú bar3!");
                dal.Classes.InsertOnSubmit(newclass);
                dal.SubmitChanges();
            }

            // Dæmi um innsetningu nemenda og vensl við námskeið
            if (key == 's')
            {
                // Gerum innsetningu innan transactionscope.
                using (TransactionScope ts = new TransactionScope())
                {
                    Student newstudent = new Student("Geir H Haarde", "dh@visir.is");
                    dal.Students.InsertOnSubmit(newstudent);
                    // Þurfum að inserta nýja stúdentinum til að fá ID á hann
                    // Það á að gerast sjálfkrafa vegna autosync á ID dálki!
                    dal.SubmitChanges(); 

                    // Venslum núna stúdentinn við nýja tímann, Fú bar2!
                    StudentToClass s2c = new StudentToClass();
                    s2c.ClassID = (from c in dal.Classes
                                   where c.ClassName.Equals("Fú bar2!")
                                   select c.ClassNumber).First<int>();
                    s2c.StudentID = newstudent.ID;
                    dal.StudentsToClasses.InsertOnSubmit(s2c);
                    dal.SubmitChanges();

                    ts.Complete();

                }
            }
        }
    }
}
